package edu.szcu.cstms_admin.controller;

import edu.szcu.cstms_admin.dto.LoginDTO;
import edu.szcu.cstms_admin.entity.UserInfo;
import edu.szcu.cstms_admin.service.UserInfoService;
import edu.szcu.cstms_admin.util.R;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.Objects;

/**
 * 登录注册控制器
 */
@RestController
public class LoginController {

    private final UserInfoService userInfoService;

    public LoginController(UserInfoService userInfoService) {
        this.userInfoService = userInfoService;
    }

    /**
     * 用户登录
     *
     * @param loginDTO 登录信息（用户名、密码、验证码）
     * @return 登录结果，包含用户信息或错误消息
     */
    @PostMapping("/login")
    public R<UserInfo> login(@RequestBody LoginDTO loginDTO) {
        System.out.println(">>> 前端发送过来的数据是： = " + loginDTO);
        // 参数校验
        if (loginDTO == null || loginDTO.getUsername() == null || loginDTO.getPassword() == null) {
            return R.error("登录信息不完整");
        }

        // 验证码校验（实际项目中应该有验证码校验逻辑） todo ...
        // 此处简化处理，不做实际验证

        // 根据用户名查询用户信息
        UserInfo userInfo = userInfoService.selectByName(loginDTO.getUsername());
        if (userInfo == null) {
            return R.error("用户名不存在");
        }

        // 密码校验（实际项目中应该使用加密算法）
        if (!Objects.equals(userInfo.getPassword(), loginDTO.getPassword())) {
            return R.error("密码错误");
        }

        // 登录成功，返回用户信息（实际项目中可能需要隐藏密码等敏感信息）
        return R.success(userInfo, "登录成功");
    }

    /**
     * 用户注册
     *
     * @param userInfo 用户信息
     * @return 注册结果
     */
    @PostMapping("/registry")
    public R<Long> registry(@RequestBody UserInfo userInfo) {
        // 参数校验
        if (userInfo == null || userInfo.getName() == null || userInfo.getPassword() == null) {
            return R.error("注册信息不完整");
        }

        // 检查用户名是否已存在
        UserInfo existingUser = userInfoService.selectByName(userInfo.getName());
        if (existingUser != null) {
            return R.error("用户名已存在");
        }

        // 设置创建时间和更新时间
        LocalDateTime now = LocalDateTime.now();
        userInfo.setCreateTime(now);
        userInfo.setUpdateTime(now);

        // 调用服务进行注册
        int rows = userInfoService.insert(userInfo);
        if (rows <= 0) {
            return R.error("注册失败");
        }

        // 注册成功，返回用户ID
        return R.success(userInfo.getId(), "注册成功");
    }
}
